2015-05-11 134 views
1

我可以手動註冊我的倉庫,像這樣:通用註冊與Autofac?

builder.RegisterType<Repository<Account>>().As<IRepositoryAsync<Account>>(); 
builder.RegisterType<Repository<User>>().As<IRepositoryAsync<User>>(); 
builder.RegisterType<Repository<Order>>().As<IRepositoryAsync<Order>>(); 

,但似乎無法自動註冊。我試了幾件事情,沒有運氣,這就是:

builder.RegisterAssemblyTypes(typeof(Account).Assembly) 
    .Where(t => t.IsAssignableFrom(typeof(IRepositoryAsync<>))) 
    .AsSelf() 
    .AsImplementedInterfaces(); 

..和這個

builder.RegisterAssemblyTypes(typeof(Account).Assembly) 
    .AsClosedTypesOf(typeof(IRepositoryAsync<>)); 

回答

1

如果你想解決IRepositoryAsync<Foo>,試試這個:

ContainerBuilder builder = new ContainerBuilder(); 
builder.RegisterGeneric(typeof(Repository<>)) 
     .As(typeof(IRepositoryAsync<>)); 

IContainer container = builder.Build(); 

IRepository<Foo> fooRepository = container.Resolve<IRepositoryAsync<Foo>>(); 

你的兩個解決方案都是相似的,如果你有一個FooRepository將工作。

例如:

public class FooRepository : IRepositoryAsync<Foo> 
{ } 

// ... 

builder.RegisterAssemblyTypes(typeof(FooRepository).Assembly) 
     .AsClosedTypesOf(typeof(IRepositoryAsync<>)); 
+0

謝謝!這工作。 builder.RegisterGeneric(typeof(Repository <>))。As(typeof(IRepositoryAsync <>)); – BBauer42