Moin,
ich habe in meinem ersten Projekt Autofac integriert:
C#-Code: |
public static IContainer Configure()
{
var builder = new ContainerBuilder();
builder.RegisterType<DbContext>().As<IDbContext>();
builder.RegisterType<EmployeeRepository>().As<IEmployeeRepository>();
builder.RegisterType<DepartmentRepository>().As<IDepartmentRepository>();
return builder.Build();
}
|
und dann so eingebunden
C#-Code: |
var container = ContainerConfig.Configure();
using (var scope = container.BeginLifetimeScope())
{
var test = scope.Resolve<IDepartmentRepository>();
dept = test.GetById(DepartmentFK);
}
|
dies klappt auch soweit, allerdings schaue ich mir gerade anhand meines ersten Projekts "Caliburn.Micro" an und dachte mir das ich auch gleich den dort inegrierten "SimpleContainer" nutzen könnte. Ich habe den Bootstrapper bereits erstellt und der Teil mit dem Container sieht so aus:
C#-Code: |
private SimpleContainer _container = new SimpleContainer();
protected override void Configure()
{
_container.Instance(_container);
_container
.Singleton<IWindowManager, WindowManager>()
.Singleton<IEventAggregator, EventAggregator>()
.Singleton<IDbContext, DbContext>()
.Singleton<IDepartmentRepository, DepartmentRepository>();
GetType().Assembly.GetTypes()
.Where(type => type.IsClass)
.Where(type => type.Name.EndsWith("ViewModel"))
.ToList()
.ForEach(viewModelType => _container.RegisterPerRequest(
viewModelType, viewModelType.ToString(), viewModelType));
}
|
Sodele, wenn ich nun folgendes mache:
C#-Code: |
public class Test
{
private readonly IDepartmentRepository _dep;
public Test(IDepartmentRepository Dep)
{
_dep = Dep;
}
public DepartmentEntity teststuff()
{
var test = _dep.GetById(MyId);
return test;
}
}
|
sollte ich ja schlussendlich das Gleiche kriegen, allerdings bedingt durch das fehlende Using bleibt der Container offen (wenn ich das richtig verstanden habe). Wie kann ich das mit SimpleContainer erreichen?