简体   繁体   English

Autofac:注册显式通用接口

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM