关于使用drop-in DLL的指南

时间:2010-05-27 19:49:30

标签: c# dll

我的任务是在.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);

1 个答案:

答案 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();