我的任务是在.Net中为我的工作重写内部实用程序。新系统的程序要求之一是拥有一个实现一组接口的DLL,并让程序调用DLL。
现在这个DLL将在每个部署中进行大量更改。我的问题是从发展的角度来看,最好的方法是什么?我是否会向项目引用添加模板DLL(只有接口但没有实现的模板),就像我会使用其他任何我会使用的DLL一样?
或者,每次我想使用DLL中的代码时,是否需要使用类似的东西?
var DropIn = System.Reflection.Assembly.LoadFrom("DropInDll.dll");
var getActions = DropIn.GetType("Main").GetMethod("GetActions");
List<IAction> ActionList = (List<IAction>)getActions.Invoke(null, null);
答案 0 :(得分:2)
将依赖注入与控制容器的反转一起使用。
由于您已经编写了定义的接口,因此不需要任何反射。
以下是使用CodePlex中的公共服务定位器的示例,特别是Simple Service Locator实施。
假设您有一个IDropIn接口,以及实现该接口的不同DLL。
首先,您需要在系统中注册您的界面:
void Init()
{
// Read dropInDllName and dropInClassName from your config file
Assembly assembly = Assembly.Load(dropInDllName);
IDropIn dropIn = (IDropIn)assembly.CreateInstance(dropInClassName);
SimpleServiceLocator container = new SimpleServiceLocator();
container.RegisterSingle<IDropIn>(dropIn);
Microsoft.Practices.ServiceLocation.ServiceLocator.SetLocatorProvider(() => container);
}
然后,要在其他地方获取代码中的实例,请执行以下操作:
IDropIn dropIn = ServiceLocator.Current.GetInstance<IDropIn>();
List<IAction> actionList = dropIn.GetActions();