これは、Global.asax での StructureMap の現在の実装です。
var container = (IContainer)IOCContainer.Initialize();
DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));
以下は、上記で参照されているコードです。
public static class IOCContainer
{
public static IContainer Initialize()
{
ObjectFactory.Initialize(x =>
{
x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
scan.AddAllTypesOf<IController>();
});
x.For<IConfigRepository>().Use<ConfigRepository>();
});
return ObjectFactory.Container;
}
}
public class StructureMapDependencyResolver : IDependencyResolver
{
public StructureMapDependencyResolver(IContainer container)
{
_container = container;
}
public object GetService(Type serviceType)
{
if (serviceType.IsAbstract || serviceType.IsInterface)
{
return _container.TryGetInstance(serviceType);
}
else
{
return _container.GetInstance(serviceType);
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
return _container.GetAllInstances<object>()
.Where(s => s.GetType() == serviceType);
}
private readonly IContainer _container;
}
共有接続を使用するとパフォーマンスが少し向上する可能性があることを読んだので、MVC アプリでこれを使用する方法を考えていました。新しく作成した PetaPoco.Database オブジェクトをリポジトリのコンストラクタに渡す必要があると思いますか??
ありがとう