我正在使用Unity DI容器。在配置文件中,我将以下类型指定为:
<type type="Interfaces.ILogger,Interfaces"
mapTo = "ConcreateClasses.ConsoleLogger,ConcreateClasses" />
我的理解是我的项目中应该引用接口dll和ConcreteClasses dll以使其工作。
但我想做的是不在设计时引用具体的实现类。我希望通过指定ConcreteClasses dll的路径在运行时加载它们。
有办法做到这一点吗?
由于
答案 0 :(得分:3)
您无需在项目中引用具体的实现程序集,只需将其与配置文件放在同一文件夹中,或者从GAC中获取。
使用具体实现引用其他程序集 CONVENIENT ,以便Visual Studio将DLL的副本放在项目的结果BIN文件夹中,从而使查找变得微不足道。
答案 1 :(得分:1)
你可以通过反思来做到这一点:
Assembly a = Assembly.LoadFrom("pathToDll");
Type interfaceType = typeof(Interfaces.ILogger);
Type implementingType = a.GetTypes.Where(t => t.IsAssignableTo(interfaceType)).First(); //add any other constraints to decide mapping
container.RegisterType(interfaceType, implementingType);