统一-无需resolve()即可解决

| 我只想用属性[DoInjection]标记一个属性并统一进行注入。我不想使用prop = Unity.Resolve(type)。那是痛苦和混乱。团结是否提供了做到这一点的属性,还是我必须建立自己的属性? 编辑:在App.Main中注册
ISessionFactory sf = new SessionFactory();
            container.RegisterType<IRepository, CustomerRepository>(new InjectionConstructor(sf.CurrentUoW));
            container.RegisterInstance<IUnitOfWork>(sf.CurrentUoW);
在ClassX其他类中对IUnitOfWork属性使用[Dependency],但它始终为null。我是否需要使用Unity来构建ClassX实例才能使其正常工作?看来我必须这么做。我不喜欢那样     
已邀请:
Unity有一个
DependencyAttribute
可用于此目的:
public class MyObject
{
  private SomeOtherObject _dependentObject;

  [Dependency]
  public SomeOtherObject DependentObject 
  {
    get { return _dependentObject; }
    set { _dependentObject = value; }
  }
}
http://msdn.microsoft.com/en-us/library/ff650198.aspx 根据您的问题,听起来您可能试图在错误的地方使用Unity,并且您的设计意识正在告诉您它感觉不合适。您应该仅在引导应用程序的位置看到Unity。这就是控制台应用程序中的Main方法,或者Web或wcf应用程序中的Global.asax。这个想法是一直依赖于整个链上的依赖项,直到您使用IoC容器引导并解析该顶层对象为止。在控制台应用程序中,我这样做:
class Program
{
    static void Main(string[] args)
    {
        using (var container = new UnityContainer())
        {
            container
                .AddExtension(new ConfigureForConsole(args))
                .Resolve<MyApplication>()
                .Execute();
        }
    }
}
http://www.agileatwork.com/console-application-with-ioc/ 在这种情况下,“ 4”是我的顶级对象(这里不需要是接口)。
ConfigureForConsole
只是一个一次性的自定义容器扩展,其中包含所有
RegisterType
行。或者,您可以在此处从App.Config初始化容器。但想法是您的Main方法几乎没有任何内容。这种方法的另一个好处是,它使您的代码更具可移植性。我发现控制台应用程序通常会变成Windows服务,并且在此处保持整洁,这使过渡非常轻松。     

要回复问题请先登录注册