也许我误会了团结,但这里。我有几个应用程序,它们都加载相同的插件程序集。所有程序集都需要一个库,我希望它们能够通过unity访问这个库。但是,为了使用unity或任何其他ioc框架,我必须为这个库编写一个接口。我可能会这样做,但由于除了支持unity之外,实际上不需要任何接口,我担心这意味着我1)遗漏了要点,或2)误用了框架。如果我避免了一些提供d i的东西,那么我必须将库类设置为singleton,然后将其传递给所有的插件构造函数,或者通过公共属性,我不想这样做。也就是说,在没有实际使用Unity实现任何功能的情况下,我还没有得到其他细节——尽管Unity允许我通过resolve请求库,但是我的插件仍然需要引用在主应用程序中创建的Unity实例。那么,在这种情况下,您唯一的选择是将unity引用传递给所有插件,但是从那一点开始就很方便了,仅仅因为您可以使用unity获取所有其他依赖项吗?更新我意识到我漏掉了重点,但希望有人能为我澄清——我不应该到处把裁判传给曼联!我只需要在我的应用程序中创建容器,然后注册所有类型。然后当我实例化我所有的插件时,它们应该能够神奇地使用那些注册的接口,几乎不需要额外的努力,对吧?在我的例子中,我的构造函数必须是无参数的,因为我的插件加载器不能处理参数,在这种情况下,我将不得不使用属性注入来让它们访问接口,对吧?另一个更新我试着团结起来。我注册了所有插件都需要的类实例。我也知道我的插件加载程序最终会遇到一个问题,因为它们是无参数的(我可能需要将一个ref传递给unity才能使它们工作)。不过,就目前而言,我正在直接创建一个插件,我正在通过resolve方法来实现这一点。所以基本上代码是这样的:// app codeICandySettings _candy_settings = new CandySettings();IUnityContainer unity = new UnityContainer().RegisterInstance<ICandySettings>( _candy_settings);CandyPlugin _plugin = unity.Resolve<Candy>(); // throws null reference exception, see below.// plugin codepublic class Candy{ [Dependency] ICandySettings CandySettings { get; set; } ... public Candy() { CandySettings.GetSetting("box"); // CandySettings is null! why? Didn't Unity do this for me? }}所以我现在的问题是我希望(鉴于我的知识有限),unity会自动地将插件的candysettings引用设置为通过registerinstance注册的任何实例,但事实并非如此。可行的选择如果我跳过Smoke和Mirrors,只将UnityContainer传递到插件的构造函数中,那么我可以调用unity.resolve()来设置CandySettings属性的值,一切都很好。我很想知道为什么依赖属性没有像我想的那样工作。如果我没有弄错的话,我实际上不需要将unity传递给我的插件加载程序中的每个构造函数。我应该只使用unity.resolve(),如果[dependency]工作的话,它可能会工作。不过,现在我明白了每个人都在说,如何选择一个ioc容器,然后将它强制给您的整个开发团队。喵喵!到目前为止,mef正在为我赢得这场战斗。很简单,神奇的烟雾和镜子很适合我的需要(目前)。但我还是希望团结工作。我觉得奇怪的是,对于mef来说,我只需要组成部分,其他的一切就都到位了,而我似乎无法让unity自动注入东西,我必须通过引用传递到所有地方的unity来解决所有问题。这不可能是对的。更多MEF我喜欢这样的想法:我可以很容易地用mef解析多个对象,但是如果我使用策略模式来指示代码行为,那又如何呢?目前,只需将引用从一个行为的实现更改为另一个行为的实现,就可以工作了。有人和我一起做这个吗?使用importmany,然后使用额外的代码来确定应该调用列表中的哪些行为,这是正确的方法吗? 最佳答案 如果您的依赖注入需求很小(从它的声音来看,它们很小),您可能需要考虑尝试MEF。这是轻量级的,易于使用,并且具有直接位于.net 4框架中的优点,这意味着如果您移动到.net4,就不需要部署额外的需求。在此期间,3.5版本通过codeplex站点支持它。mef在这方面很好,因为它可以在任何类型上工作,而不仅仅是在接口上。也就是说,如果你想让插件使用你的应用程序提供的“库”,你很可能总是需要这个库被你的插件(或者至少一组api的基类或接口)使用和引用。关于c# - 是否有像Unity这样的东西可以用于不需要界面的简单事物?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2648869/