Th3*_*B0Y 3 .net c# unity-container
是否可以注册相同的接口两次,其中第一个解析为默认实现,第二个具有名称并解析为另一种类型。
例子:
container.RegisterType(typeof(IMyInterface), typeof(MyDefaultImplementation));
container.RegisterType(typeof(IMyInterface), typeof(MySecondImplementation),"Second Implementations name");
Run Code Online (Sandbox Code Playgroud)
所以,
Resolve<IMyInterface>("non existing name")
Run Code Online (Sandbox Code Playgroud)
应该解决 MyDefaultImplementation。
如果您可以使用容器,则可以执行扩展方法:
public static class UnityExtensions
{
public static T TryResolve<T>(this IUnityContainer container, string name)
{
if (container.IsRegistered<T>(name))
return container.Resolve<T>(name);
return container.Resolve<T>();
}
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
container.RegisterType<IMyInterface, Foo>();
container.RegisterType<IMyInterface, Bar>("bar");
var foo = container.TryResolve<IMyInterface>("non-existing");
// foo will be Foo
var bar = container.TryResolve<IMyInterface>("bar");
// bar will be Bar.
public interface IMyInterface { }
public class Foo : IMyInterface { }
public class Bar : IMyInterface { }
Run Code Online (Sandbox Code Playgroud)
缺点是您需要知道何时使用扩展名,何时不使用...否则您可以构建自己的BuilderStrategy.
受以下因素影响较大:
Unity - loadConfiguration,如何只解析那些已配置的
| 归档时间: |
|
| 查看次数: |
2034 次 |
| 最近记录: |