2

我读了一篇关于using Autofac to completely decouple an application的非常酷的博客。但尽可能地尝试(而且对于这些都是非常新的),我无法让Autofac凝胶化。配置Unity时对独立项目的引用?

我从MS模式转向Unity &实践企业图书馆,这一切都变得更好。为了让事情不必要的困难我自己,我分离出来,我所有的东西转化项目为:

  • UnityDi(控制台应用程序)
  • UnityDi.Contracts(接口)
  • UntiyDi.Domain(类)
  • UnityDi.Repositories(数据访问)
  • UnityDi.Services(访问通过服务层到资源库)

我使用XML配置小马了统一:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" /> 
    </configSections> 
    <unity xmlns="http://schemas.microsoft.com/practices/2010/unity"> 
     <assembly name="UnityDi.Contracts" /> 
     <assembly name="UnityDi.Domain" /> 
     <assembly name="UnityDi.Services" /> 
     <assembly name="UnityDi.Repositories" /> 
     <namespace name="UnityDi.Contracts" /> 
     <namespace name="UnityDi.Domain" /> 
     <namespace name="UnityDi.Services" /> 
     <namespace name="UnityDi.Repositories" /> 
     <container> 
      <register type="IUser" mapTo="User"></register> 
      <register type="IUserService" mapTo="UserService"></register> 
      <register type="IUserRepository" mapTo="UserRepository"></register> 
     </container> 
    </unity> 
</configuration> 

而且得到了到正在运行的应用程序,无后顾之忧:

private static readonly IUnityContainer Container = new UnityContainer(); 
... 
Container.LoadConfiguration(); 

但为了做到这一点,我需要从我的控制台应用程序,上述所有项目的参考。

有没有办法让应用程序只有一个参考UnityDi。 合同(接口)?然后,该应用程序就可以很好地解耦(当然还有大锤)。

我希望这是足够的解释,我完全是新的这一点,我正在这样极端,以促进更好的学习。

+0

使用XML配置时,您*不需要引用所有项目?是什么让你觉得你呢? –

+0

即使你有一个引用所有其他项目的项目:问题是什么?这就是bootstrappers的意思。选中这个[链接](http://blog.ploeh.dk/2011/07/28/CompositionRoot.aspx) –

+0

我在VS2010中创建了一个图层,并且向我展示了确实我的各层依赖于合同。 Irks我说,我的主要项目必须参考Unity的其他项目,以便在进行配置时查找它们,但我想Unity会以某种方式需要一个钩子。 – Richard

回答

1

我怀疑它看起来像你需要项目引用的原因是没有它们,当你点击F5时,VS不会将程序集复制到你的应用程序bin文件夹中。它会如何,它无法知道你需要它们!

项目引用是解决问题的最快捷方式。您可以做的另一件事是添加一个构建后步骤来复制适当的DLL,最终放到正确的目录中,以便您可以运行该应用程序。

+0

现货,谢谢。 – Richard