如果在同一解决方案中同时使用 Unity 和 Ninject 依赖注入,是否会有内存问题?



我有一个解决方案,其中包含多个类库项目和一个WCF Web服务项目。依赖关系注入在 Unity 2.1 中处理,在 WCF 项目的 Web 配置文件中,我已经注册了我的新类库项目,如下所示。

<container name="unityDI">
<register type="INewProcess" mapTo="NewProcess"/>
<register type="ISomeService" mapTo="SomeService">
<constructor>
<param name="newProcess" type="INewProcess" />
<param name="Service1" type="IService1" />
<param name="repository1" type="IRepository1" />
</constructor>
</register>

在我添加到此解决方案的类库项目中,NewProcess 类是客户端将使用库的位置。

这是我在其中启动依赖项处理过程以处理类库中的依赖项的类。 此库实现了基于不同工作流和少数其他帮助程序类处理验证的策略模式,这些帮助程序类用于实现此验证的不同实用程序。

下面是我在NewProcess类中的代码

public class NewProcess : INewProcess
{
private readonly IKernel _kernel = new StandardKernel(new NewProcessValidationsLibraryNinjectModule());
/// <inheritdoc />
public Tuple<string, IDictionary<string, string>> DetermineCandidate(string val1, string val2, string val3)
{
var newValidationObjectFactory = _kernel.Get<INewValidationObjectFactory>();
return newValidationObjectFactory.DetermineValidationStrategy(val1, val2, val3);
}
/// <inheritdoc />
public NewStatusObject GetSomeReceivedStatus(NewStatusObject newStatusObject)
{
var statusReceiveStatusChecker = _kernel.Get<IStatusReceiveStatusChecker>();
return statusReceiveStatusChecker.GetNewReceiveStatus(newStatusObject);
}
}

在NewProcessValidationsLibraryNinjectModule中,我有以下代码

public class NewProcessValidationsLibraryNinjectModule : NinjectModule
{
public override void Load()
{
Kernel.Bind(x => x.FromThisAssembly().SelectAllClasses().BindAllInterfaces());
}
}

有人可以让我知道在上述同时使用 Unity 和 Ninject 时是否存在任何与内存泄漏相关的问题吗?或者这是在同一解决方案中使用 Unity 和 Ninject 的正确方法?StandardKernel的新版本最终会出现内存问题吗?

我长时间查看了收到的评论并在运行时进行了一些测试,发现我在库中实现 DI 的方式是根据请求加载和卸载 Ninject 内核,这不是您希望 DI 容器工作的方式。 它应该在第一次加载时加载所有依赖项。

为了解决此问题,我选择在我的解决方案中使用 Unity。显然,此举使库调用速度更快,我不必担心在同一解决方案中使用 2 个不同的 DI 容器以及它可能给您的解决方案带来的复杂性。

最新更新