Wcf 向Autofac进行通用注册?
我可以手动注册我的存储库,如下所示:Wcf 向Autofac进行通用注册?,wcf,dependency-injection,autofac,Wcf,Dependency Injection,Autofac,我可以手动注册我的存储库,如下所示: builder.RegisterType<Repository<Account>>().As<IRepositoryAsync<Account>>(); builder.RegisterType<Repository<User>>().As<IRepositoryAsync<User>>(); builder.RegisterType<Repository&
builder.RegisterType<Repository<Account>>().As<IRepositoryAsync<Account>>();
builder.RegisterType<Repository<User>>().As<IRepositoryAsync<User>>();
builder.RegisterType<Repository<Order>>().As<IRepositoryAsync<Order>>();
builder.RegisterType().As();
builder.RegisterType().As();
builder.RegisterType().As();
但似乎无法自动注册它们。我尝试了一些运气不佳的事情,即:
builder.RegisterAssemblyTypes(typeof(Account).Assembly)
.Where(t => t.IsAssignableFrom(typeof(IRepositoryAsync<>)))
.AsSelf()
.AsImplementedInterfaces();
builder.RegisterAssemblyTypes(typeof(Account.Assembly)
.Where(t=>t.IsAssignableFrom(typeof(IRepositoryAsync)))
.AsSelf()
.a实现接口();
…还有这个
builder.RegisterAssemblyTypes(typeof(Account).Assembly)
.AsClosedTypesOf(typeof(IRepositoryAsync<>));
builder.RegisterAssemblyTypes(typeof(Account.Assembly)
.AsClosedTypesOf(typeof(IRepositoryAsync));
如果要解析IRepositoryAsync
,请尝试以下操作:
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterGeneric(typeof(Repository<>))
.As(typeof(IRepositoryAsync<>));
IContainer container = builder.Build();
IRepository<Foo> fooRepository = container.Resolve<IRepositoryAsync<Foo>>();
谢谢这起作用了。RegisterGeneric(typeof(Repository)).As(typeof(IRepositoryAsync));
public class FooRepository : IRepositoryAsync<Foo>
{ }
// ...
builder.RegisterAssemblyTypes(typeof(FooRepository).Assembly)
.AsClosedTypesOf(typeof(IRepositoryAsync<>));