Dmi*_*nik 5 c# dependency-injection autofac
我有一个存储库工厂 NhRepositoryFactory
public interface IRepositoryFactory
{
IRepository<T> Create<T>() where T: Entity;
}
public class NhRepositoryFactory: IRepositoryFactory
{
public IRepository<T> Create<T>() where T : Entity
{
return new NhRepository<T>();
}
}
Run Code Online (Sandbox Code Playgroud)
为了解决一些存储库依赖关系,我想从Autofac容器中获取它们.所以我应该以某种方式将Func<IRepository<T>>工厂注入我的班级.我怎么能做到这一点?
提前致谢.
它不NhRepositoryFactory包含业务逻辑,可以成为组合根的一部分.这允许您让它具有对容器的引用.这只是机制,不被认为是服务定位器反模式.该 NhRepositoryFactory会是这样的:
// This class is part of your composition root
public class NhRepositoryFactory : IRepositoryFactory
{
private readonly Container container;
public NhRepositoryFactory(Container container)
{
this.container = container;
}
public IRepository<T> Create<T>() where T : Entity
{
return this.container.Resolve<NhRepository<T>>();
}
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样注册:
builder.Register<IService>(c => new NhRepositoryFactory(c))
.SingleInstance();
Run Code Online (Sandbox Code Playgroud)
Autofac还能够在没有工厂的情况下本地处理通用创建.
builder.RegisterGeneric(typeof(NhRepository<>))
.As(typeof(IRepository<>))
.InstancePerLifetimeScope();
Run Code Online (Sandbox Code Playgroud)
使用此模式,您可以简单地依赖IRepository,autofac将填充依赖项.
| 归档时间: |
|
| 查看次数: |
8017 次 |
| 最近记录: |