如何解决是否可以禁用UnityContainer的自动实例化行为?
| UnityContainer.Resolve()将实例化尚未通过反射显式注册的类,从而实现了以下目的:using System;
using Microsoft.Practices.Unity;
namespace ConsoleApplication2
{
public class Foo
{
public void SayHello()
{
Console.WriteLine(\"Hello\");
}
}
class Program
{
static void Main(string[] args)
{
var container = new UnityContainer();
var foo = container.Resolve<Foo>();
foo.SayHello();
}
}
}
我的问题是,如果我想禁用此行为是可能的,这样就不会自动解决该类(引发异常或返回null吗?)
解决方法
它不是内置的,但是您可以编写一个容器扩展名来更改此行为。这将需要两件事-首先是用于注册事件的处理程序,该事件用于在策略列表中注册类型时进行记录,其次,该策略将检查“已注册”策略并在是否已注册时抛出该策略。不在那里。
如果您熟悉编写扩展程序,那么它相当小而且容易实现。不幸的是,我现在没有时间集合在一起,对不起。
,您可以通过传递注册名称来使用
Resolve<>()
,如此处所述。因此,请尝试传递不存在的注册名称,然后看看会发生什么。希望这将绕过Unity的反射逻辑并返回一个“ 2”对象。
,考虑使用接口。
像这样:
interface IFoo{...}
class Foo:IFoo{...}
// ...
var foo = container.Resolve<IFoo>(); // Exception here
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。