C# Autofac New Instance



我有一个类"DependencyResolver";其中我手动返回对象的实例。在那里我使用了";Activator.CreateInstance";。我想把它改成使用自动交流。

我的功能";获取"工作良好:

public T Get<T>()
{
return _container.Resolve<T>();
}

但我也有一个功能";创建新的";我需要一个新实例:

public T CreateNew<T>()
{
return _container.Resolve<T>();
}

问题是我总是得到同样的例子。我的注册如下:

var builder = new ContainerBuilder();
foreach (var dllFileName in DependencyMapping.GetAllDllFilenames())
{
builder
.RegisterAssemblyTypes(Assembly.LoadFile(Path.Combine(GetPathFromInstalledSys(), dllFileName)))
.AsImplementedInterfaces()
.SingleInstance();
}
_container = builder.Build();

所以有一个地方我可以控制这种行为:;SingleInstance";或";InstancePerDependency";。但是我不知道用户是否需要一个新的实例。有什么方法可以改变当";创建新的";被称为?

生存期范围(单个实例,每个依赖项的实例(在注册时控制,而不是在解析时控制。没有办法改变它。所有DI容器都是这样,而不仅仅是Autofac。其中的一部分是,消费者不应该知道他们想要什么范围——他们只是要求一件东西并得到它。

消费者通常也不应该处理垃圾——东西是由容器处理的。

请注意,这里的内容是服务位置(客户端向容器请求东西(,而不是依赖项注入(客户端在构造函数中获取依赖项,但不知道容器(。虽然有时需要服务地点,但如果可以的话,通常尽量避免;这并不比在代码中调用CCD_ 1好多少。

相关内容

最新更新