1

Unity を使用して、自分のアプリで Orchard CMS からいくつかのものを模倣しようとしています..

さて、私がやろうとしていることはこれです...

IDependency というマーカー インターフェイスがあるとします。

public interface IDependency{ }

次に、これにぶら下がっているいくつかのインターフェイスがあります...

public interface ICustomerService : IDependency { }

public interface ICustomerRepository : IDependency { }

そして、いくつかのクラスもあります...

public class CustomerService : ICustomerService {
     public CustomerService(ICustomerRepository customerRepo){ }
}

public class SomOtherCustomerService : ICustomerService {
     public CustomerService(ICustomerRepository customerRepo){ }
}

public class NicksController : Controller {
     public NicksController(IEnumerable<ICustomerService> customerServices) { }
}

 public class NicksSecondController : Controller {
     public NicksSecondController(IEnumerable<ICustomerService> customerServices) { }
}

私がこれまでに持っているもの..

var container = new UnityContainer();

container
    .ConfigureAutoRegistration()
    .ExcludeSystemAssemblies()
    //.Include(If.Implements<IDependency>, Then.Register()
    //.As<IDependency>().UsingLifetime<PerResolveLifetimeManager>())
    .Include(t =>
        typeof(IDependency).IsAssignableFrom(t), (type, builder) =>
            {
                builder.RegisterType(type);

                foreach (var interfaceType in type.GetInterfaces()
                .Where(itf => typeof(IDependency).IsAssignableFrom(itf))) {
                    builder = builder.RegisterType(interfaceType, type);
                }
            })
    .ApplyAutoRegistration();

NicksSecondController への IEnumerable の注入に失敗しています...何かアイデアはありますか??

乾杯、ニック

4

1 に答える 1

3

初期設定では、Unity は配列を解決する方法しか知りません。codeplex のTecX プロジェクトを見てください。IEnumerable<T>これには、コンテナーにIList<T>を処理するように教えるカスタム拡張機能が含まれてICollection<T>います。コードはTecX.Unity (フォルダーCollections ) にあります。

于 2012-05-24T08:12:57.793 に答える