[英]Autofac : register explicit generic interface
With Autofac, i can register a generic interface like this:使用 Autofac,我可以像这样注册一个通用接口:
builder.RegisterType<MyService<MyViewModel>>().As<IMyService<MyViewModel>>();
is it possible to register like this instead?可以这样注册吗?
builder.RegisterType<MyService<MyViewModel>>().As<IMyService<IMyViewModel>>();
Yes.是的。 It is possible but you need to add generic constraint and out (generic modifier).
这是可能的,但您需要添加通用约束和输出(通用修饰符)。
Here is an example.这是一个例子。
public interface IMyService<out TModel>
where TModel : IMyViewModel
{
}
public class MyService<TModel> : IMyService<TModel>
where TModel : IMyViewModel
{
}
public interface IMyViewModel
{
}
public class MyViewModel : IMyViewModel
{
}
// Register
builder.RegisterType<MyService<MyViewModel>>().As<IMyService<MyViewModel>>();
builder.RegisterType<MyService<MyViewModel>>().As<IMyService<IMyViewModel>>();
// Resovle
var resolve1 = container.Resolve<IMyService<MyViewModel>>();
var resolve2 = container.Resolve<IMyService<IMyViewModel>>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.