Unityはパブリックコンストラクターのみを参照するため、このコンストラクターをパブリックにする必要があります。
このクラスを公開したいのですが、ファクトリ経由でのみ作成できるようにしたいと思います。
その場合、ファクトリを作成します。
public class MyClassFactory : IMyClassFactory
{
private readonly IService service;
public MyClassFactory(IService service)
{
this.service = service;
}
MyClass IMyClassFactory.CreateNew()
{
return new MyClass(this.service);
}
}
そして登録:
_container.Register<IMyClassFactory, MyClassFactory>();
そして解決する:
_container.Resolve<IMyClassFactory>().CreateNew();
Unityを使用することもできますInjectionFactory
:
container.Register<MyClass>(new InjectionFactory(c =>
{
return new MyClass(c.Resolve<IService>());
}));
これが機能するためには、このコードを保持するアセンブリが、を保持するアセンブリの内部を確認できる必要がありますMyClass
。つまり、MyClass
アセンブリには。のマークを付ける必要がありInternalsVisibleTo
ます。
また、機能するのは次のとおりです。
public static class MyClassFactory
{
public static MyClass CreateNew(IService service)
{
return new MyClass(service);
}
}
container.Register<MyClass>(new InjectionFactory(c =>
{
return MyClassFactory.Create(c.Resolve<IService>());
}));
コンストラクターを公開する必要はありませんが、コードを難読化するのに最適な方法です:-)