我正在开发一个 C# 类库项目。该项目引用了其他 DLL 文件,例如 log4net.dll。在这个项目中,我只有一个使用 log4net.dll 的类。当其他项目引用我的项目时,只有当其他项目正在调用使用 log4net.dll 的类时,我才想将 log4net.dll 复制到它的 bin 文件夹中。
这可行吗?
将您的库一分为二并从主库中删除 log4net.dll 的引用,并且仅当您需要与需要 log4net.dll 的部分相关联的东西时才引用第二个库。
处理这种情况的好方法是依赖注入——看看企业库(统一容器)——尽管这会给你一个额外的 dll :)
使用统一容器:
您将拥有带有 ILog4NetUsingInterface 的 Library1
在 Library2 中,您将拥有类 Log4NetUsingClass : ILog4NetUsingInterface
在 Library2 中,您将拥有将 Log4NetUsingClass 注册为 ILog4NetUsingInterface 的实现的引导程序
public static class Bootstrapper {
public static void Init() {
ServiceLocator.IoC.RegisterSingleton<ILog4NetUsingInterface, Log4NetUsingClass>();
}
}
只有在需要使用 Log4NetUsingClass 时才会调用此 Init 方法
在其他所有图书馆中,您都可以调用
ServiceLocator.IoC.Retrieve<ILog4NetUsingInterface>()
(如果你不调用引导程序,它会给你运行时错误。)