我有一個類,RepositoryManager
,而我在我的一些控制器的使用這個類:與構造StructureMap容器參數
public RepositoryManager
{
public IGenericRepository Repository {get; set;}
public RepositoryManager()
{
Repository = new GenericRepository(new MyEntities());
}
//...
}
我想IGenericRepository移動到StructureMapInversion of control(IOC)容器
x.For<IGenericRepository>().Use<GenericRepository>().Ctor<MyEntities>("MyEntities");
然後我改變我的類的構造函數是:
public RepositoryManager(IGenericRepository repository)
{
Repository = repository;
}
但注射不起作用。我也嘗試使用Repository上的[SetterProperty]
屬性,但仍然沒有實例化Repository。
我做錯了什麼?
我的完整的IoC初始化:
public static class IoC {
public static IContainer Initialize() {
ObjectFactory.Initialize(x =>
{
x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
x.For<IRepositoryManager>().Use<RepositoryManager>();
x.For<IGenericRepository>().Use<GenericRepository>().Ctor<MyEntities>("MyEntities");
});
return ObjectFactory.Container;
}
}
FYI(無關你的問題),的ObjectFactory已經作爲靜態網關,所以沒有必要將其包裝在您自己的IoC靜態類中。如果你仍然喜歡你自己的靜態類,那麼沒有理由使用StructureMaps - 只需創建一個新的Container實例,並將初始化塊傳遞給它的構造函數。從你的Initialize方法返回。 –