如何使用Autofac注入泛型类型的工厂
本文关键字:工厂 泛型类型 注入 何使用 Autofac | 更新日期: 2023-09-27 18:27:40
我有一个存储库工厂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>();
}
}
为了解决一些存储库依赖关系,我想从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>>();
}
}
你可以这样注册:
builder.Register<IService>(c => new NhRepositoryFactory(c))
.SingleInstance();
Autofac还能够在没有工厂的情况下以本机方式处理泛型创建。
builder.RegisterGeneric(typeof(NhRepository<>))
.As(typeof(IRepository<>))
.InstancePerLifetimeScope();
使用此模式,您可以简单地获取对IRepository的依赖项,autofac将填充依赖项。