I'm using structuremap 3.1.2.138 in MVC5. In my IoC-class i'm trying to use the Objectfactory but it states Objectfactory is obsolete and I should use Container but I can't find a way to make this work.
public static IContainer Initialize() {
var BS_WebDataContextConnectionString = "Data Source=xxx;Initial Catalog=xxx;Integrated Security=True;MultipleActiveResultSets=True";
ObjectFactory.Initialize(x =>
{
x.Scan(scan =>
{
scan.Assembly(Assembly.GetCallingAssembly());
scan.WithDefaultConventions();
});
//DataContext
x.For<iBS_WebDataContext>().Use<BS_WebDataContext>()
.Ctor<string>("connectionString")
.Is(BS_WebDataContextConnectionString);
//Repositories
x.For<IReadOnlyEvidenceTypeRepository>().Use<EF6ReadOnlyEvidenceTypeRepository>();
x.For<IReadOnlyStatusCategoryRepository>().Use<EF6ReadOnlyStatusCategoryRepository>();
//Services
x.For<IEvidenceTypeService>().Use<EvidenceTypeService>();
x.For<IStatusCategoryService>().Use<StatusCategoryService>();
});
return ObjectFactory.Container;
}
Could anyone give me an example how to convert this to the container-way?
It would be done like so (including moving your configurations into a registry to keep it nice and tidy.
WebsiteRegistry.cs
public class WebsiteRegistry : Registry
{
public WebsiteRegistry()
{
x.Scan(scan =>
{
scan.Assembly(Assembly.GetCallingAssembly());
scan.WithDefaultConventions();
});
//DataContext
var BS_WebDataContextConnectionString = "Data Source=xxx;Initial Catalog=xxx;Integrated Security=True;MultipleActiveResultSets=True";
x.For<iBS_WebDataContext>().Use<BS_WebDataContext>().Ctor<string>("connectionString").Is(BS_WebDataContextConnectionString);
//Repositories
x.For<IReadOnlyEvidenceTypeRepository>().Use<EF6ReadOnlyEvidenceTypeRepository>();
x.For<IReadOnlyStatusCategoryRepository>().Use<EF6ReadOnlyStatusCategoryRepository>();
//Services
x.For<IEvidenceTypeService>().Use<EvidenceTypeService>();
x.For<IStatusCategoryService>().Use<StatusCategoryService>();
}
}
Then registered like so:
IContainer yourContainer = new Container();
yourContainer.Configure(c =>
{
c.IncludeRegistry<WebsiteRegistry>();
});