微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LightInject-注册同一接口的多个实现

如何解决LightInject-注册同一接口的多个实现

使用Lightinjector DI框架如何注册同一接口的多个实现?如何在构造函数上提及相同的接口并要求其不同的实现?

     container.Register<IInterface1,Myclass1>();
     container.Register<IInterface1,Myclass2>();   

尝试注释时,遇到以下异常

 "message": "Unable to resolve type: 
    "innererror": {
      "trace": "   at LightInject.ServiceContainer.CreateDelegate(Type serviceType,String serviceName,Boolean throwError) in C:\\projects\\lightinject\\build\\tmp\\netstandard16\\Binary\\LightInject\\LightInject.cs:line 3901\r\n   at LightInject.ServiceContainer.CreateDefaultDelegate(Type serviceType,Boolean throwError) in C:\\projects\\lightinject\\build\\tmp\\netstandard16\\Binary\\LightInject\\LightInject.cs:line 3859\r\n   at LightInject.ServiceContainer.TryGetInstance(Type serviceType) in C:\\projects\\lightinject\\build\\tmp\\netstandard16\\Binary\\LightInject\\LightInject.cs:line 2777\r\n   at LightInject.Scope.WithThisScope[T](Func`1 function) in C:\\projects\\lightinject\\build\\tmp\\netstandard16\\Binary\\LightInject\\LightInject.cs:line 6169\r\n

容器注册如下,

     container.EnableAnnotatedPropertyInjection();
     container.Register<ILoginHandler,LoginHandler>("LoginHandler");

在类“ User.cs”上的构造函数注入,如下所示,

public class User
{
   public ILoginHandler _loginHandler { get; private  set; }    
   public class([Inject(serviceName: "LoginHandler")]ILoginHandler loginHandler)
   {
      _loginHandler = loginHandler;
   }
}

解决方法

这称为Named Services-在我见过的大多数IOC / DI容器中,这是相当标准的(请参阅有关命名服务的部分)。

 container.Register<IInterface1,Myclass1>("Foo");
 container.Register<IInterface1,Myclass2>("Bar");
 var instance = container.GetInstance<IInterface1>("Foo");
 Assert.IsInstanceOfType(instance,typeof(Myclass1));

有道理吗? :)

 public class FooWithNamedAnnotatedProperyDependency
{
    [Inject("Foo")]
    public IInterface1 Service { get; set; }
}

public FooWithNamedAnnotatedDependency([Inject(ServiceName="Foo")]IInterface1 service)
{
    _service = service;
}

look at annotations

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。