オーチャードCMSを使用してウェブサイトを作成しています。オーチャードCMS内のモジュールと一緒に使用する依存関係注入用のNinjectで書かれた外部.NETプロジェクトがあります。私はOrchardが依存性注入のためにAutofacを使用していることを知っています。オーチャードCMSでNinject .NETプロジェクトを使用できますか?
私はこのように、ソースレジスタAutofacモジュール、UserModule
、UserRegistrationSource
を作成した:
UserModule.cs
public class UserModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterSource(new UserRegistrationSource());
}
}
UserRegistrationSource.cs
public class UserRegistrationSource : IRegistrationSource
{
public bool IsAdapterForIndividualComponents
{
get { return false; }
}
public IEnumerable<IComponentRegistration> RegistrationsFor(Service service, Func<Service, IEnumerable<IComponentRegistration>> registrationAccessor)
{
var serviceWithType = service as IServiceWithType;
if (serviceWithType == null)
yield break;
var serviceType = serviceWithType.ServiceType;
if (!serviceType.IsInterface || !typeof(IUserServices).IsAssignableFrom(serviceType) || serviceType != typeof(IUserServices))
yield break;
var registrationBuilder = // something...
yield return registrationBuilder.CreateRegistration();
}
}
UserServices.cs
public interface IUserServices : IDependency
{
void Add(string email, string password);
}
public class UserServices : IUserServices
{
private readonly EFMembershipManager _manager;
public UserServices(EFMembershipManager manager)
{
_manager = manager;
}
public void Add(string email, string password)
{
_manager.createUser(email, password);
}
}
EFMembershipManager.csコンストラクタ
public EFMembershipManager(ServerRepository db,
ServerRepositoryMembershipProvider membershipProvider,
string testUsername,
string serverUsername)
{
...
}
EFMembershipManager
はDIのためNinjectを使用してもNinjectを使用して注入されServerRepository
とServerRepositoryMembershipProvider
を使用する外部プロジェクトからのクラスです。
そして今、私がこだわっている...
がUserRegistrationSource
コンストラクタ引数としてNinjectコンテナ(カーネル)に乗り、IUserServices
サービスを見つけようとし、その後Ninjectカーネルに解決を仲介し、空を返す必要がありますオートファックがIUserServices
に関連する何かを解決しようとしないように列挙できる、またはこれは間違ったアプローチですか?
なぜ書き換えが必要なのか説明できますか?私には、注射を扱っている小さなコードだけを修正する必要があるように思えます。あなたは問題に言及します。彼らは具体的に何ですか? –
@BertrandLeRoy外部プロジェクトには多くの依存性注入と依存性注入にもNinjectを使用する他のプロジェクトへの参照があるという事実から書き直しています。したがって、すべてを機能させるためには多くの変更が行われます。私が直面している問題は、すべてのNinject注射をAutofac注射に変換することなく、Orchardモジュールで外部プロジェクトを参照する方法です。それが可能であれば。 – Mattias
私は別の方法があるとは思わないか、この仕事をすることができるでしょうか。その外部プロジェクトを外部に保つ方が良いかもしれません。 –