2017-07-19 39 views
0

如何告訴註冊這個通用存儲庫?每個請求應通過ApplicationDbContext作爲TCAutoFac寄存器通用類型明確

我已經試過這樣的事情:

builder.RegisterGeneric(typeof(Repository<object, ApplicationDbContext>)).As(typeof(IRepository<>)); 

目前,我必須註冊每一個seperately其作品,但繁瑣:

builder.RegisterType<Repository<AudioModel, ApplicationDbContext>>().As<IRepository<AudioModel>>(); 

庫:

public class Repository<T, TC> : IRepository<T> 
     where T : class 
     where TC : DbContext 
{ 
    private bool _disposed; 

    protected TC Context { get; } 

    public Repository() 
    { 

    } 

    public Repository(TC context) 
    { 
     Context = context; 
    } 
} 

服務:

public class UploadService : IUploadService 
{ 
    private readonly IRepository<AudioModel> _repository; 

    public UploadService(IRepository<AudioModel> repository) 
    { 
     _repository = repository; 
    } 
} 

回答

-1

您可以用這種方式註冊您的通用存儲庫:

builder.RegisterGeneric(typeof(Repository<>), typeof(IRepository<>)); 

您必須先註冊你的AudioModel(我會用一個接口,而不是對象)和你的數據庫環境。 然後你可以解決它。

+0

這不起作用,不是我想要的 –

0

如果TC應始終設置爲ApplicationDbContext,則有可能使TC不是一個泛型參數(它不需要是通用的,它始終是非常具體)。

如果這不是一個選項,你可以創建一個ApplicationDbContextRepository

public class ApplicationDbContext<T> : Repository<T, ApplicationDbContext> 
{ 
} 

並註冊這一項爲:

builder.RegisterGeneric(typeof(ApplicationDbContext<>) 
     .As(typeof(IRepository<>)); 

但是,這取決於你的應用程序設計的其餘部分。