初始化后用ninject创建对象
本文关键字:创建对象 ninject 初始化 | 更新日期: 2023-09-27 18:15:35
我是Ninject(和一般的DI)的新手。
我理解内核是如何加载模块的,到目前为止我写的代码往往只有一行:
myKernel.Get<MyApp>()
从我的模块中的绑定中构造我需要的一切。如果需要在初始化后创建新实例,则由我为初始化绑定的工厂来处理。到目前为止,工厂没有任何对象依赖,只是根据需要更新对象。
现在我已经达到了一个点,我需要考虑初始化后的对象创建,我自己的工厂模式不再切割它了。这将支持(远程)客户端的发布/订阅接口。对于到服务器的每个新连接,我都希望根据在一个ject模块中定义的一组绑定创建新的IClient
实例。这是否意味着我在初始化时传入的工厂必须有自己的内核(或对主内核的引用)?CommonServiceLocator的功能在哪里?CSL是必需的吗?
在我深入探讨这个问题之前,我想最好先问问别人是如何处理这个问题的。
创建工厂接口
public interface IClientFactory
{
IClient CreateClient();
}
对于Ninject 2.3,请参阅https://github.com/ninject/ninject.extensions.factory,并通过添加以下配置让Ninject实现它。
Bind<IClientFactory>().ToFactory();
对于2.2,自己实现。这个实现是容器配置的一部分,而不是你的实现的一部分。
public class ClientFactory: IClientFactory
{
private IKernel kernel;
public ClientFactory(IKernel kernel)
{
this.kernel = kernel;
}
public IClient CreateClient()
{
return this.kernel.Get<IClient>();
}
}
看起来下面的factory模式可能满足我的要求:
Bind<Func<IClient>>().ToMethod(ctx => () => ctx.Kernel.Get<ClientImpl>());
我有一个构造函数的形式:
SomeCtor(Func<IClient> clientFactory, blah...)