hatte ich genau dieses gleiche Problem:
Haben Sie eine generische Repository:
public interface IRepository<TEntity> : IDisposable where TEntity : class
{ }
und eine konkrete Umsetzung:
public class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{ }
die i wollte spritzen ed in den Konstruktor des Controller zur Laufzeit, wo die TEntity das Modell relevant, dass die Steuerung würde:
public FooBarController(IRepository<FOO_BAR_TYPE> repository)
{
_repo = repository;
}
der Controller würde dann Repository „_repo“ verwendet das Modell zu aktualisieren:
//
// POST: /EmergencyServiceType/Create
[HttpPost]
public ActionResult Create(FOO_BAR_TYPE foobar)
{
if (ModelState.IsValid)
{
// GetNextSequenceValue() deals with Oracle+EF issue with auto-increment IDs
foobar.FOO_BAR_ID = _repo.GetNextSequenceValue();
_repo.Add(foobar);
_repo.SaveChanges();
return RedirectToAction("Index");
}
return View(foobar); // display the updated Model
}
simonjreid Die Antwort für mich war: Ich musste den ObjectContext zur StructureMap-Konfiguration hinzufügen (der Zweck des Repositories war es, den von EntityFramework generierten Kontext, den ich MyContextWrapper nannte, zu schließen).Deshalb, weil das Repository auf MyContextWrapper angewiesen, die auf Object wiederum hängt):
// This avoids 'No Default Instance for ...DbConnection' exception
x.For<System.Data.Objects.ObjectContext>().Use<MyContextWrapper>();
x.For<System.Web.Mvc.IController>().Use<Controllers.FooBarController>().Named("foobarcontroller"); // note that Named is required and is Case Sensitive
Aber jetzt bekomme ich die StructureMap Laufzeit Ausnahme:
StructureMap Ausnahmecode: 205 Fehlende angeforderte Instanz Eigenschaft " connection“
einen Beitrag von Jeremy Miller A Gentle Quickstart (rechts unten) nach der Lektüre fand ich, dass Sie definieren können, welche Argumente in t passieren er Konstruktor Ihrer registrierten Typen, dh i der MyCustomContext Klasse in der Connection String an den Konstruktor übergeben erforderlich (hier ist die vollständige Liste der, wie ich bin der Initialisierung des Object:
string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["MyContextWrapper"].ConnectionString;
ObjectFactory.Initialize(x =>
{
x.Scan(scan =>
{
// Make sure BUSINESS_DOMAIN assembly is scanned
scan.AssemblyContainingType<BUSINESS_DOMAIN.MyContextWrapper>();
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
// 'connStr' below is a local variable defined above
x.For<System.Data.Objects.ObjectContext>()
.Use<MyContextWrapper>()
.Ctor<string>().Is(connStr);
x.For<System.Web.Mvc.IController>().Use<Controllers.FooBarController>().Named("foobarcontroller");
});
Und BOOM! Kann jetzt meinen Controller zur Laufzeit von StructureMap instantiiert haben und ihn dazu bringen, eine Instanz von IRepository ... Happy Days zu injizieren.
Danke dafür, mein generisches Repository nimmt einen ObjectContext, den ich nicht durch SM hinzugefügt habe – simonjreid
Ist das eine Antwort oder eine andere Frage? Wenn es eine Frage ist, warum ist es als die akzeptierte Antwort markiert? –