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