私はasp.net mvc 3アプリケーションでMEFを使用しようとしていますが、私は注入を実現できませんでした。ここでは、コードは次のようになります。asp.net mvcでmefを使用する3
私が持っているインターフェースクラスライブラリを持っている:
namespace Namespace.Interfaces
{
public interface IMessenger
{
string GetMessage();
}
}
そして、私はクラスがIMessengerから継承する必要があり、別のクラスライブラリで:
namespace Namespace.Message
{
[Export(typeof(IMessenger))]
public class Messenger : IMessenger
{
public Messenger()
{
}
public string GetMessage()
{
return "Mef Test!";
}
}
}
私は「部品を持っています"ディレクトリにあり、" Messenger "というクラスを含むクラスライブラリのdllをコピーしています。ここで
private static CompositionContainer _container;
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
DirectoryCatalog catalog = new DirectoryCatalog(Server.MapPath("Plugins"), "*.dll");
_container = new CompositionContainer(catalog);
_container.ComposeParts();
DependencyResolver.SetResolver(new MefDependencySolver(_container));
}
がMefDependencyResolverクラスです:Global.asaxの中
私が持っている
public class MefDependencySolver : IDependencyResolver
{
public MefDependencySolver(CompositionContainer compositionContainer)
{
this.compositionContainer = compositionContainer;
}
private CompositionContainer compositionContainer;
public object GetService(Type serviceType)
{
string name = AttributedModelServices.GetContractName(serviceType);
return compositionContainer.GetExportedValueOrDefault<object>(name);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return this.compositionContainer.GetExportedValues<object>(serviceType.FullName);
}
}
そして最後に、私はそのような私のコントローラでそれを使用しようとしている:
public class HomeController : Controller
{
[ImportAttribute]
public IMessenger _messenger { get; set; }
public HomeController()
{
}
public ActionResult Index()
{
ViewBag.Message = _messenger.GetMessage();
return View();
}
}
ただし、_messengerオブジェクトは作成されません。私は、オブジェクトのインスタンスに設定されていないオブジェクト参照を取得しています。私は間違って何をしていますか?事前に
おかげで、あなたがそのように、あなたのGetServices
方法書き換える必要があるすべての
私は助けが必要です。全く分からない? – anilca
MEF 2でこのシナリオを簡略化するために*ロット*を実行しました。現在CodePlexバージョンのみが利用可能ですが、フィードバックがあれば素晴らしいでしょう! http://blogs.msdn.com/b/bclteam/archive/2011/11/11/using-mef-2-with-asp-net-mvc-3.aspx –