这并没有什么意义。你会问容器IRepository
,那么它如何知道泛型类型参数应该是什么样的,以便它能给你一个MyRepository<,>
?
所以当要求返回这样一个对象:
public class MyService
{
private IRepository<Something, SomethingElse> _repo;
public MyService(IRepository<Something, SomethingElse> repo)
{
// Container will actually give us MyRepository<Something, SomethingElse>
_repo = repo;
}
}
我希望之一:
services.AddTransient(typeof(IRepository<,>), typeof(MyRepository<,>));
,或者,如果你的资料库不需要是通用的(我不知道了解为什么它会需要通用参数,因为它是),那么我会想到这一点:
services.AddTransient(typeof(IRepository), typeof(MyRepository));
然而,由于没有这里涉及到仿制药,你可以用另一种形式来实现同样的事情少打字:
services.AddTransient<IRepository, MyRepository>();
所以,真正的答案是解决你的接口/类设计。显示更多的执行他们会有所帮助。
UPDATE
你的执行工作必须:
类实现:
public class MyRepository<TEntity, TContext> : IRepository<TEntity, TContext>
where TEntity : class
where TContext : IDbContext, new()
{
...
}
接口:
public interface IRepository<TEntity, TContext> : IDisposable
where TEntity : class
where TContext : IDbContext, new()
{
...
}
这里是我正在做我的核心库的DependencyInjection:services.AddScoped (); –
lucas
你(lucas)和OP之间有明显的区别。请注意开放式泛型。你仍然在核心中使用DI框架,核心只是公开一些接口来轻松挂接它。 –
我仍然会继续删除Ninject,并添加诸如Autofac,StructureMap或LightInject之类的东西。但是,该文档指出,功能非常有限,我认为这不会延伸到开放泛型。我喜欢结构映射,因为它是基于约定的程序集扫描 –